package com.poly.flowable.pojo.dto;


import com.poly.common.core.tools.utils.Func;
import com.poly.flowable.enums.form.QueryTypeEnum;
import com.poly.flowable.enums.form.SystemFieldEnum;
import lombok.Data;

import java.util.Arrays;
import java.util.List;

@Data
public class FormFieldDTO {

    /**
     * 字段KEY
     */
    private String key;

    /**
     * 字段控件类型
     */
    private String controlType;

    /**
     * 字段名称
     */
    private String fieldName;

    /**
     * 字段名称
     */
    private String oldFieldName;

    /**
     * 注释
     */
    private String comment;

    /**
     * 查询类型
     */
    private String queryType;

    /**
     * 场景分组
     */
    private List<String> sceneGroup;

    /**
     * 场景分组
     */
    private String listener;

    /**
     * 场景分组
     */
    private String listenerFieldName;

    /**
     * 字典名称
     */
    private String dictName;

    /**
     * 默认值
     */
    private Object defaultValue;

    /**
     * 是否必填
     */
    private Boolean required;

    /**
     * 是否多选
     */
    private Boolean multiple;

    /**
     * 多选上限（0不限
     */
    private Boolean multipleLimit;

    /**
     * 最小长度
     */
    private Long minLength;

    /**
     * 最大长度
     */
    private Long maxLength;

    /**
     * 精度
     */
    private Integer precision;

    /**
     * 数据类型
     */
    private String dataType;

    /**
     * 数据长度
     */
    private Integer len;

    /**
     * 场景分组
     */
    private List<FormItemDTO> itemList;

    public FormFieldDTO() {
    }

    public FormFieldDTO(SystemFieldEnum fieldEnum, String ... sceneGroup) {
        this.fieldName = fieldEnum.getFieldName();
        this.dataType = fieldEnum.getDataType();
        this.comment = fieldEnum.getComment();
        if(Func.isNotEmpty(sceneGroup) && sceneGroup.length > 0) {
            this.sceneGroup = Arrays.asList(sceneGroup);
        }
    }
    public FormFieldDTO(SystemFieldEnum fieldEnum, QueryTypeEnum queryType, String ... sceneGroup) {
        this.fieldName = fieldEnum.getFieldName();
        this.dataType = fieldEnum.getDataType();
        if(Func.isNotEmpty(queryType)) {
            this.queryType = queryType.name();
        }
        if(Func.isNotEmpty(sceneGroup) && sceneGroup.length > 0) {
            this.sceneGroup = Arrays.asList(sceneGroup);
        }
    }

}
